//: C14:InheritStack2.cpp
// From Thinking in C++, 2nd Edition
// Available at http://www.BruceEckel.com
// (c) Bruce Eckel 1999
// Copyright notice in Copyright.txt
//{L} ../C13/Stack4
// Composition vs. inheritance
#include "../C13/Stack4.h"
#include "../require.h"
#include <iostream>
#include <fstream>
#include <string>
using namespace std;

class StringList
{
    Stack stack; // Embed instead of inherit
public:
    void push(string* str) {
        stack.push(str);
    }
    string* peek() const {
        return (string*)stack.peek();
    }
    string* pop() {
        return (string*)stack.pop();
    }
};

int main()
{
    ifstream file("InheritStack2.cpp");
    assure(file, "InheritStack2.cpp");
    string line;
    StringList textlines;
    while (getline(file,line))
        textlines.push(new string(line));
    string* s;
    while ((s = textlines.pop()) != 0) // No cast!
        cout << *s << endl;
} ///:~
